package NO10_Math;

/**
 * 2025-09-01
 * 力扣 - 201. 数字范围按位与
 * <p>
 * 给你两个整数 left 和 right ，表示区间 [left, right] ，
 * 返回此区间内所有数字 按位与 的结果（包含 left 、right 端点）。
 */
public class RangeBitwiseAndMain {
    public static void main(String[] args) {
        System.out.println(rangeBitwiseAnd(10, 13));
    }

    // 找公共前缀，然后后面的全补0
    // 因为区间是连续的，所以除了公共前缀，后面的是从0->1的变化
    public static int rangeBitwiseAnd(int left, int right) {
        int shift = 0;
        while (left < right){
            left = left >> 1;
            right = right >> 1;
            shift++;
        }
        return left << shift;
    }
}
